package Thread;

/**
 * @author 杜伟毅
 * @version 1.0
 * @since 2024/08/25
 * 单例设计模式--懒汉模式--将不安全的懒汉模式改成安全的
 */
public class Singleton {
    private static volatile Singleton instance;

    private Singleton() {
    }

    public static Singleton getInstance() {
        /**
         * 只有第一次为null的时候才能执行后续代码，否则返回null
         * 第一次为null先排队
         */
        if (instance == null) {
            /**
             * 上锁
             */
            synchronized (Singleton.class) {
                /**
                 * 如果没有这个if，则会产生多个单例
                 * 为了只有一个线程创建对象
                 */
                if (instance == null) {
                    instance = new Singleton();
                    return instance;
                }
            }
        }
        return instance;
    }
}
